from flask import Flask, current_app


app = Flask(__name__)
ctx = app.app_context()
ctx.push()
a = current_app.config['DEBUG']

with app.app_context():
  a = current_app
  d = current_app.config['DEBUG']

'''
  应用级别上下文
    对对象 flask 封装  
  请求上下文
    对 request 对象 封装
  Flask 核心对象存储在 AppContext上下文中
  Request 核心对象在 RequestContext上下文中
  为什么需要上下文？
    主要封装Flask对象，外部参数对象和Flask对象组成一个新对象，就是上下文
    并提供一些方法，pop，push，exit，enter
    不要直接拿flask，request对象
    从Context间接去那
  LocalProxy 代理 提供 current_app request 间接操作上下文能力

  _request_ctx_stack = LocalStack()
  _app_ctx_stack = LocalStack() 
  当一个请求进来，flask会把它放入_request_ctx_stact栈中 push

  数据库管理
    1，链接数据库
    2，sql
    3，释放资源
  对于文件读写
  


'''

try:
  f = open('a.txt')
  print(f.read())
finally:
  f.close()

with open('a.txt') as f:
  print(f.read())

# 举例
class A:
  def __enter__(self):
    a = 1
    return a
  def __exit__(self, exc_type, exc_value, tb):
    b = 2
    return True

with a() as obj_a:
  print(obj_a) # 1




